


/** case 1 相同名字的function重复申明*/
/*
在变量提升阶段,如果名字重复了,不会重新的进行声明,但是会重新进行定义(后面赋的值会把前面赋的值替换掉,不是覆盖,覆盖是把那个干没了,比如原先a=12现在a=13,12那个值还在 只是 a的被替换成和13进行链接了)
*/
//↓ 4 4 4 报错
// => 变量提升: fn=aaafff111 (=aaafff222) (=aaafff333) (=aaafff444)
fn(); //4
function fn(){
    console.log(1);
}
fn(); //4
function fn(){
    console.log(2);
}
fn(); //4
var fn = 13;
fn(); //报错
function fn(){
    console.log(3);
}
fn();
function fn(){
    console.log(4);
}
fn();




/** case 2 function和var重复申明*/
a() // ←var a=123 不会覆盖 function a的定义 var在编译阶段不会覆盖值 参看03函数执行与执行上下文

function a(){
    console.log(123)
}

var a = 123;

console.log(typeof a); // number